package com.org.redis.config;

import com.org.redis.lru.LRURedisMap;
import com.org.redis.lru.LRURedisStack;
import redis.clients.jedis.Jedis;

import java.util.Map;
import java.util.Set;

public class JedisClient {

    /** 自增id **/
    public static long incr(String key){
        return JedisUtil.getJedis().incr(key);
    }

    /** KV **/
    public static void set(String key,String value){
        JedisUtil.getJedis().set(key,value);
    }

    public static void expire(String key,int seconds){
        JedisUtil.getJedis().expire(key,seconds);
    }

    public static String get(String key){
        return JedisUtil.getJedis().get(key);
    }

    public static String setAndGet(String key, String value){
        Jedis jedis = JedisUtil.getJedis();
        jedis.set(key,value);
        return jedis.get(key);
    }

    public static void set(String key,String value,int seconds){
        JedisUtil.getJedis().set(key, value, "NX", "EX", seconds);
    }

    public static boolean exists(String key){
        return JedisUtil.getJedis().exists(key);
    }

    public static void setnx(String key,String value){
        JedisUtil.getJedis().setnx(key,value);
    }

    /** list **/
    public static void lpush(String key,String... values){
        JedisUtil.getJedis().lpush(key,values);
    }

    public static void rpush(String key,String... values){
        JedisUtil.getJedis().rpush(key,values);
    }

    public static String rpop(String key){
        return JedisUtil.getJedis().rpop(key);
    }

    public static String lpop(String key){
        return JedisUtil.getJedis().lpop(key);
    }

    public static long llen(String key){
        return JedisUtil.getJedis().llen(key);
    }

    public static void lclear(String key){
        JedisUtil.getJedis().ltrim(key,1,0);
    }

    /** hash **/
    public static void hset(String key,String field,String value){
        JedisUtil.getJedis().hset(key,field,value);
    }

    public static String hget(String key,String field){
        return JedisUtil.getJedis().hget(key,field);
    }

    public static void hdel(String key,String... fields){
        JedisUtil.getJedis().hdel(key,fields);
    }

    public static Map<String,String> hgetAll(String key){
        return JedisUtil.getJedis().hgetAll(key);
    }

    public static boolean hexists(String key,String field){
        return JedisUtil.getJedis().hexists(key,field);
    }

    /** set **/

    /**
     * 往set集合添加若干个值（不重复）
     * @param key
     * @param members
     */
    public static void sadd(String key,String... members){
        JedisUtil.getJedis().sadd(key,members);
    }

    /**
     * 获取该set集合的长度
     * @param key
     * @return
     */
    public static long slen(String key){
        return JedisUtil.getJedis().scard(key);
    }

    /**
     * 获取set集合所有的元素
     * @param key
     * @return
     */
    public static Set<String> sall(String key){
        return JedisUtil.getJedis().smembers(key);
    }

    /**
     * 删除set集合里面若干个元素
     * @param key
     * @param members
     */
    public static void sdel(String key,String... members){
        JedisUtil.getJedis().srem(key,members);
    }

    /**
     * 返回第一个集合的差集
     */
    public static Set<String> sdiff(String... set){
        return JedisUtil.getJedis().sdiff(set);
    }

    /**
     * 返回两个集合的并集
     */
    public static Set<String> sunion(String... set){
        return JedisUtil.getJedis().sunion(set);
    }

    /**
     * 返回两个集合的集
     * @param set
     * @return
     */
    public static Set<String> sinter(String... set){
        return JedisUtil.getJedis().sinter(set);
    }

    /**高级拓展**/

    public static LRURedisStack getStack(){
        return new LRURedisStack();
    }

    public static LRURedisMap getMap(){
        return new LRURedisMap();
    }



}
